/**
 * @file api.js
 * @description API 服务层，用于封装所有与后端API的交互。
 * @author hanyujie
 */

const BASE_URL = 'https://fakestoreapi.com';

/**
 * 获取所有商品。
 * @async
 * @returns {Promise<Array|null>} 返回商品数组，如果请求失败则返回 null。
 */
export const fetchProducts = async () => {
  try {
    const response = await fetch(`${BASE_URL}/products`);
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    const data = await response.json();
    return data;
  } catch (error) {
    console.error("获取所有商品失败:", error);
    return null;
  }
};

/**
 * 根据ID获取单个商品。
 * @async
 * @param {string|number} id - 商品的ID。
 * @returns {Promise<object|null>} 返回单个商品对象，如果请求失败则返回 null。
 */
export const fetchProductById = async (id) => {
  try {
    // ★★★ 修改这里：确保是标准的模板字符串 ★★★
    const response = await fetch(`${BASE_URL}/products/${id}`);
    // console.log(`WorkspaceProductById(${id}) - URL: ${BASE_URL}/products/${id}`); // 调试时可以取消注释
    // console.log(`WorkspaceProductById(${id}) - Status: ${response.status}`);
    // console.log(`WorkspaceProductById(${id}) - Content-Type: ${response.headers.get('Content-Type')}`);
    // const responseText = await response.clone().text();
    // console.log(`WorkspaceProductById(${id}) - Raw Response Text (first 200 chars):`, responseText.substring(0, 200));

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    const data = await response.json();
    return data;
  } catch (error) {
    console.error(`获取商品ID ${id} 失败:`, error);
    return null;
  }
};

/**
 * 根据分类获取商品列表。
 * @async
 * @param {string} category - 商品分类名称。
 * @returns {Promise<Array|null>} 返回该分类下的商品数组，如果请求失败则返回 null。
 */
export const fetchProductsByCategory = async (category) => {
  try {
    // ★★★ 修改这里：确保是标准的模板字符串 ★★★
    const response = await fetch(`${BASE_URL}/products/category/${encodeURIComponent(category)}`);
    // console.log(`WorkspaceProductsByCategory(${category}) - URL: ${BASE_URL}/products/category/${encodeURIComponent(category)}`); // 调试时可以取消注释
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    const data = await response.json();
    return data;
  } catch (error) {
    console.error(`获取分类 ${category} 商品失败:`, error);
    return null;
  }
};